// 编写的一个迭代器
const iterator = {
  next: function () {
    return { done: true, value: 123 };
  },
};

// 迭代器 iterator 需要满足 迭代器协议 iterator protocol
// 也就是 实现 next 函数， 函数 返回 done 和 value
// next 为一个无参数或者一个参数的函数，返回一个应当拥有以下两个属性的对象
// 在 迭代结束前 函数 返回 done: false 和 value（任意值） 组成的对象
// 在 迭代结束后 函数 返回 done: true (可省略，但最好写上) 和 value （任意值） 组成的对象

// 创建一个迭代器对象来访问数组
const iterableObj = {
  names: ["abc", "cba", "nba"],
  [Symbol.iterator]: function () {
    let index = 0;
    return {
      next: () => {
        if (index < this.names.length) {
          return { done: false, value: this.names[index++] };
        } else {
          return { done: true, value: undefined };
        }
      },
    };
  },
};

// iterableObj对象就是一个可迭代对象
// 当一个对象实现可迭代协议 iterable protocol时，那么这个对象就是可迭代对象
// 迭代器和可迭代对象(迭代器对象)不一样。他们实现的条件不一样
// 可迭代对象 需要实现 @@iterator 方法，在代码中我们使用 Symbol.iterator 访问该属性；
